﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NetFramework.Utility
{
    public static class PathUtils
    {
        /// <summary>
        /// 获取完全限定位置路径。
        /// </summary>
        /// <param name="fullPathOrRelativePath">完全限定位置路径(D:\\)或相对路径(~/Web)。</param>
        /// <returns>
        /// 如果 <paramref name="fullPathOrRelativePath"/> 是完全限定位置路径，则直接返回。<br/>
        /// 如果 <paramref name="fullPathOrRelativePath"/> 是相对路径，则返回该相对路径的对应的完全限定位置路径。
        /// </returns>
        /// <remarks><paramref name="fullPathOrRelativePath"/> 不可以是站点虚拟目录路径。</remarks>
        public static string GetFullPath(string fullPathOrRelativePath)
        {
            string path = fullPathOrRelativePath;

            if (!IsFullPath(path))
            {
                if (fullPathOrRelativePath.StartsWith("~"))
                    path = path.TrimStart('~');

                path = string.Format("{0}\\{1}",
                    AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\', '/'),
                    path.TrimStart('\\', '/').Replace("/", "\\"));
            }

            return path;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fullPath"></param>
        /// <returns></returns>
        public static string ToVirtualPath(string fullPath)
        {
            return string.Format("~/{0}", fullPath.Replace("\\", "/")
                .Replace(AppDomain.CurrentDomain.BaseDirectory.Replace("\\", "/"), "")
                .TrimStart(new char[] { '/' }));
        }

        /// <summary>
        /// 获取一个值，该值指示指定的路径字符串是否包含完全限定位置的文件或目录。
        /// </summary>
        /// <param name="path">要测试的路径。</param>
        /// <returns>如果 <paramref name="path"/> 包含完全限定位置的字符串（例如“C:\”），则为 true；否则为 false。</returns>
        /// <remarks>
        /// 此方法不验证路径或文件名是否存在。
        /// <para>
        /// <typeparamref name="IsFullPath"/> 为 <paramref name="path"/> 字符串（例如 “\\MyDir”和“\\MyDir\\MyFile.txt”和 “C:\\MyDir”和“C:\\MyDir\\MyFile.txt”）返回 true。
        /// 它为 <paramref name="path"/> 字符串（例如“MyDir”和“MyDir\\MyFile.txt”）返回 false。
        /// </para>
        /// </para>
        /// </remarks>
        public static bool IsFullPath(string path)
        {
            if(string.IsNullOrEmpty(path))
            {
                return false;
            }

            return path.IndexOf(':') != -1;
        }
    }
}
